package com.learn.singleton002;

import java.util.concurrent.TimeUnit;

/**
 * 饿汉式（静态常量）[可用]
 * @author 1
 */
public class SingletonStaticSafe {

    /**
     * 小明： 老王，你上来搞一个静态常量，干啥呢？
     * 老王： 干啥？给你new个对象，这个在类装载的时候就实例化了。可以避免多线程不安全的问题。
     * 小明： 好吧。。。
     */
    private final static SingletonStaticSafe INSTANCE = new SingletonStaticSafe();

    /**
     * 小明： 哦哦哦，我知道，构造方法私有化，外部不能new了。
     * 老王： 进步挺快的嘛！不错哦！
     */
    private SingletonStaticSafe(){
    }

    /**
     * 老王： 那你说说，下面这个的作用？
     * 小明： 你笨啊，这个就是提供一个公共静态方法，返回实例对象，不然怎么干活？
     * 老王： 好吧。。。
     * @return
     */
    public static SingletonStaticSafe getInstance(){
        /**
         * 小明：
         * 这回就不可能创建多个对象了，因为类装在的时候，已经执行了静态代码的代码。也就是创建了对象。
         *  不过，这会不会造成内存浪费呢？不管了，不行就让老板加内存条吧！嘿嘿嘿
         */
        try {
            //模拟操作中的停顿
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return INSTANCE;
    }

}
